﻿namespace MicroCloud.Authorization
{
    #region "功能信息接口"
    /// <summary>
    /// 功能信息接口
    /// </summary>
    public interface IFunction : IEntity<long>, ILockable
    {
        #region "属性"
        #region "获取或设置 功能名称"
        /// <summary>
        /// 获取或设置 功能名称
        /// </summary>
        string Name { get; set; }
        #endregion
        #region "获取或设置 区域名称"
        /// <summary>
        /// 获取或设置 区域名称
        /// </summary>
        string Area { get; set; }
        #endregion
        #region "获取或设置 控制器名称"
        /// <summary>
        /// 获取或设置 控制器名称
        /// </summary>
        string Controller { get; set; }
        #endregion
        #region "获取或设置 控制器的功能名称"
        /// <summary>
        /// 获取或设置 控制器的功能名称
        /// </summary>
        string Action { get; set; }
        #endregion
        #region "获取或设置 是否是控制器"
        /// <summary>
        /// 获取或设置 是否是控制器
        /// </summary>
        bool IsController { get; set; }
        #endregion
        #region "获取或设置 是否Ajax功能"
        /// <summary>
        /// 获取或设置 是否Ajax功能
        /// </summary>
        bool IsAjax { get; set; }
        #endregion
        #region "获取或设置 访问类型"
        /// <summary>
        /// 获取或设置 访问类型
        /// </summary>
        FunctionAccessType AccessType { get; set; }
        #endregion
        #region "获取或设置 访问类型是否已更改(如为true，刷新功能时将忽略功能类型)"
        /// <summary>
        /// 获取或设置 访问类型是否已更改
        /// <para>如为 true，刷新功能时将忽略功能类型。</para>
        /// </summary>
        bool IsAccessTypeChanged { get; set; }
        #endregion
        #region "获取或设置 是否启用操作审计"
        /// <summary>
        /// 获取或设置 是否启用操作审计
        /// </summary>
        bool AuditOperationEnabled { get; set; }
        #endregion
        #region "获取或设置 是否启用数据审计"
        /// <summary>
        /// 获取或设置 是否启用数据审计
        /// </summary>
        bool AuditEntityEnabled { get; set; }
        #endregion
        #region "获取或设置 数据缓存时间（秒）"
        /// <summary>
        /// 获取或设置 数据缓存时间（秒）
        /// </summary>
        int CacheExpirationSeconds { get; set; }
        #endregion
        #region "获取或设置 是否相对过期时间，否则为绝对过期"
        /// <summary>
        /// 获取或设置 是否相对过期时间，否则为绝对过期
        /// </summary>
        bool IsCacheSliding { get; set; }
        #endregion
        #region "获取或设置 是否从库读取数据"
        /// <summary>
        /// 获取或设置 是否从库读取数据
        /// </summary>
        bool IsSlaveDatabase { get; set; }
        #endregion

        #endregion

        #region "方法"
        /// <summary>
        /// 获取控制器类型
        /// </summary>
        /// <returns>控制器类型</returns>
        Type ControllerType();

        /// <summary>
        /// 获取功能方法
        /// </summary>
        /// <returns>功能方法</returns>
        MethodInfo Method();
 
        #endregion
    }
    #endregion

}
